// 下面1，2处的输出是什么？
var obj = {
  a: 1,

  b: { s: 2 },
};

var cloneObj = Object.assign({}, obj);

cloneObj.a = 2;

console.log(obj.a); //1

cloneObj.b.s = 10;

console.log(obj.b.s); //2

// A.
// 1 and 2

// B.
// 2 and 2

// C.
// 1 and 10

// D.
// 2 and 10

// 正确答案：
// C
// 解析：
// 使用Object.assign等方式进行拷贝对象的时候，第一层是基本类型数据相当于进行深拷贝一样，而当像
// var obj = {

// a:1,

// b:{s:2}

// } 有2层或者多层数据，b属性是对象，其实就是一个引用，所以修改obj.b, 实际上就是在修改 {s:2} 这个引用，所以使用Object.assign等方式进行拷贝后，修改obj.b.s，会引起拷贝后的数据也变化。




// 补全1处的代码
const b = [[0, 1], [2, 3]].reduce(

(acc, cur,index) => {

return /*1*/

},

[1, 2]

)

console.log(b); //[1, 2, 0, 1, 2, 3]

// A.
// acc.push(cur)

// B.
// acc.connect(cur)

// C.
// acc.concat(cur)

// D.
// acc.splice(index,0,cur)

// 正确答案：
// C
// 解析：
// [1, 2]是初始值。初始值将会作为首次调用时第一个参数 acc 的值。在第一次执行时， acc 的值是 [1, 2]， cur 的值是 [0, 1]。合并他们，合并数组使用concat，结果为 [1, 2, 0, 1]。
// 第二次执行， acc 的值是 [1, 2, 0, 1]， cur 的值是 [2, 3]。合并它们，最终结果为 [1, 2, 0, 1, 2, 3]




// 补全1处的代码
const person = {

name: "Lydia",

age: 21

};

for (const item in person) {

console.log(/*1*/); //"Lydia",21

}

// A.
// person.item

// B.
// person[item]

// C.
// item

// D.
// person["item"]

// 正确答案：
// B
// 解析：
// 在for-in循环中,我们可以通过对象的key来进行迭代,也就是这里的name和age。在底层，对象的key都是字符串（如果他们不是Symbol的话）。在每次循环中，我们将item设定为当前遍历到的key.所以一开始，item是name，之后 item输出的则是age。





// 如何能打印出console.log语句后注释掉的值,请完善 1，2处的代码？
function* generator(i) {

yield i;

yield i * 2;

}

const gen = generator(10);

console.log(/*1*/); //10

console.log(/*2*/); //20

// A.
// 1.gen.next(10)

// 2.gen.next(20)

// B.
// 1.gen.next(10)

// 2.gen.next(10)

// C.
// 1.gen.next().value

// 2.gen.next().value

// D.
// 1.gen.next(10).vaue

// 2.gen.next()

// 正确答案：
// C
// 解析：
// 一般的函数在执行之后是不能中途停下的。但是，生成器函数却可以中途“停下”，之后可以再从停下的地方继续。当生成器遇到yield关键字的时候，会生成yield后面的值。注意，生成器在这种情况下不 返回 (return )值，而是 生成 (yield)值。
// 首先，我们用10作为参数i来初始化生成器函数。然后使用next()方法一步步执行生成器。第一次执行生成器的时候，i的值为10，遇到第一个yield关键字，它要生成i的值。此时，生成器“暂停”，生成了10。
// 然后，我们再执行next()方法。生成器会从刚才暂停的地方继续，这个时候i还是10。于是我们走到了第二个yield关键字处，这时候需要生成的值是i*2，i为10，那么此时生成的值便是20。所以这道题的最终结果是10,20。




// 如何能打印出console.log语句后注释掉的值,请完善 1，2处的代码？
const set = new Set([1, 1, 2, 3, 4]);

console.log(/*1*/); // Set(4) {1,2,3,4}

console.log(/*2*/);// [1,2,3,4]

// A.
// 1.{1,2,3,4}

// 2.Array.from(set)

// B.
// 1.{1,2,3,4}

// 2.[...set]

// C.
// 1.{1,2,3,4}

// 2.set

// D.
// 1.set

// 2.Array.from(set)

// 正确答案：
// D
// 解析：
// Set对象手机 独一无二 的值：也就是说同一个值在其中仅出现一次。
// 我们传入了数组[1, 1, 2, 3, 4]，他有一个重复值1.以为一个集合里不能有两个重复的值，其中一个就被移除了。所以结果是 {1, 2, 3, 4}.